home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / UTILITIE / LZEX91.ZIP / LZEXE.DOC < prev    next >
Text File  |  1989-12-24  |  13KB  |  270 lines

  1.     Documentation pour:
  2.     -------------------
  3.     LZEXE.EXE v0.91    (c) 1989 Fabrice BELLARD
  4.     Compacteur de fichiers EXE.
  5.     
  6.     
  7.     Ce programme fait parti du domaine public (FREEWARE),  donc vous pouvez
  8.   l'utiliser, le copier et le distribuer sans problème. Et vous pouvez même
  9.   en faire un usage commercial, c'est à dire compacter des fichiers EXE que
  10.   vous allez vendre. Mais la vente de LZEXE.EXE est interdite.
  11.     
  12.     
  13.     Matériel:  PC et compatibles, microprocesseur 80286 ou 80386 recommandé
  14.   pour une plus grande vitesse d'exécution.
  15.     Mémoire nécessaire: 128 Ko minimum pour lancer LZEXE.
  16.     
  17.     
  18.     1-Présentation
  19.     --------------
  20.     
  21.         Ce logiciel  compacte  des fichiers  EXE, c'est-à-dire les fichiers
  22.   EXEcutable du monde des  PC.  Mais vous pourriez me dire que  beaucoup de
  23.   logiciels  compactent des fichiers EXE mieux que  celui-ci,  ne serait-ce
  24.   que  l'excellent PKZIP ou  bien  LHARC.  Mais l'avantage de  ce programme
  25.   c'est que vos fichiers EXE une fois compactés peuvent être lancés ! Et le
  26.   décompactage est si  rapide que  pour pratiquement tous  les fichiers, ce
  27.   temps de décompactage est négligeable ! De plus le décompacteur n'utilise
  28.   aucun espace supplémentaire sur disque ou en mémoire vive dans  un disque
  29.   virtuel par exemple:  il  n'utilise que la  RAM  réservée  normalement au
  30.   fichier EXE décompacté.  De plus j'ai beaucoup optimisé mon algorithme de
  31.   compactage  en  vitesse mais aussi  en efficacité:  les fichiers EXE sont
  32.   presque  aussi petits  que les fichiers  ZIP correspondants  et bien plus
  33.   compacts que les anciens fichiers  ARC.  Mais d'autres versions  de LZEXE
  34.   suivront qui  je  l'espère  iront  encore  plus  vite  et  genèreront des
  35.   fichiers plus compacts. 
  36.     
  37.     2-Utilisation de LZEXE
  38.     ----------------------
  39.     
  40.         C'est très simple: il suffit de taper sous DOS:
  41.     
  42.     LZEXE nomfichier[.EXE]
  43.     
  44.     où "nomfichier"  est le nom du fichier EXE que  vous  voulez compacter.
  45.   L'extension  .EXE  est ajoutée par défaut.  Le fichier compacté  est créé
  46.   dans le répertoire par défaut.
  47.     
  48.     Attention !  Certains fichiers ne sont EXE que par leur  nom: en effet,
  49.   pour  le DOS,  ce n'est pas l'extension .EXE  qui caractérise ce  type de
  50.   fichier,  c'est le fait qu'il y ait au début les lettres  "MZ" suivies de
  51.   quelques octets qui indiquent la  longueur du fichier,  la taille mémoire
  52.   qu'il occupe,  etc... Ainsi certaines personnes n'hésitent pas à renommer
  53.   des fichiers  COM en  EXE,  et  cela  explique que  LZEXE refuse certains
  54.   fichiers EXE qui ne sont que des COM renommés.
  55.     
  56.     Mais  il  existe  une méthode pour  faire accepter  des fichiers  COM à
  57.   LZEXE:  il  suffit d'utiliser COMTOEXE  du même auteur  qui convertit ces
  58.   derniers en EXE (il fait l'inverse de EXE2BIN).
  59.     
  60.     Pour plus de sûreté, LZEXE n'efface pas votre ancien fichier EXE: il le
  61.   renomme en *.OLD.  De plus,  il crée le fichier temporaire  LZEXE.TMP qui
  62.   n'est renommé en *.EXE qu'à la fin du compactage.
  63.     
  64.     3-Conseils d'utilisation
  65.     ------------------------
  66.     
  67.         Pour certains fichiers,  le compactage peut ne pas fonctionner pour
  68.   plusieurs raisons:
  69.     
  70.     -  Le fichier que vous avez spécifié n'est pas un  vrai  EXE. Solution:
  71.   utiliser COMTOEXE.EXE
  72.     -  La table de relocation est trop grande.  Pour comprendre ce message,
  73.   il est nécessaire de connaître  la structure interne d'un fichier EXE: un
  74.   tel  fichier peut  s'étaler  sur plusieurs segments  à la  différence des
  75.   fichiers COM. C'est pourquoi il lui faut une table de valeurs qui indique
  76.   dans  quel  segment se  font  les  branchements  ou  les  appels  de sous
  77.   programmes par exemple.  Et si le fichier est très long, cette table peut
  78.   être très encombrante et empêcher  le compacteur d'agir.  Néanmoins, j'ai
  79.   prévu 16000  adresses de relocation, ce qui devrait suffire pour tous les
  80.   fichiers EXE, même les plus gros.
  81.     - Le fichier que vous avez spécifié a déjà été compacté avec LZEXE. 
  82.     
  83.     Notons  qu'un  autre  compacteur  de  fichiers  existe:  EXEPACK.EXE de
  84.   Microsoft.  Mais il est de loin beaucoup moins efficace  que le  mien, et
  85.   même si  votre fichier EXE est déjà  compacté  avec  ce  programme, LZEXE
  86.   pourra encore beaucoup compacter. Mais dans ce cas, un message de mise en
  87.   garde  vous  est présenté,  car  il  existe  un autre  utilitaire du même
  88.   auteur:  UPACKEXE  qui permet  de  décompacter ces fichiers  et ainsi les
  89.   gains sont encore plus importants.
  90.     
  91.     -  Le compactage n'a pas été assez efficace et fait  perdre de l'espace
  92.   sur disque:  Hé oui,  ça peut arriver,  mais généralement avec les petits
  93.   EXE (moins  de  2  Ko).  Sinon, vous pourrez pratiquement toujours gagner
  94.   quelques octets. 
  95.     
  96.     -  Le fichier EXE contient des overlays internes:  ce sont des morceaux
  97.   de programme qui se trouvent  dans le fichier EXE mais  qui  sont chargés
  98.   seulement quand le programme principal en a besoin. LZEXE ne peut pas les
  99.   compacter car il  faudrait  modifier  le routines de  chargement qui sont
  100.   dans le programme principal, et malheureusement ces routines dépendent du
  101.   compilateur et du programmeur.  Dans la version 0.91,  LZEXE  vous met en
  102.   garde de leur présence. Mais dans beaucoup de cas, la différence entre la
  103.   longueur  du  fichier EXE sur disque  et  la longueur du  code chargé est
  104.   minime  (moins  de  1024  octets)  :  dans ce cas, vous pouvez quand même
  105.   compacter car il s'agit de "marques" laissées par certains compilateurs.
  106.     
  107.     
  108.     Plus grave: certains fichiers EXE compactés "planteront" la machine:
  109.     
  110.     -  Si le programme EXE fait un test sur la taille ou  sur son intégrité
  111.   sur disque (c'est très rare).
  112.     -  S'il contient des overlays, qui doivent être chargés ensuite et donc
  113.   qui doivent occuper des positions fixes dans le fichier.
  114.     -  Pour les programmes qui marchent sous Windows (de  Microsoft): ce ne
  115.   sont pas  de vrais EXE,  donc ils refuseront  de fonctionner correctement
  116.   sous l'intégrateur.
  117.     (cette liste n'est pas exhaustive)
  118.     
  119.     
  120.     Moins grave: Certains programmes possèdent des options de configuration
  121.   qui modifient le fichier EXE (Turbo Pascal par exemple).  Dans ce cas, il
  122.   faut d'abord configurer le programme  puis le compacter et  conserver une
  123.   version non compactée pour pouvoir la modifier.
  124.     
  125.     
  126.     4-Du point de vue technique (pour les connaisseurs !)
  127.     -----------------------------------------------------
  128.     
  129.     L'algorithme  de  compactage  que j'ai  fait  est fondé sur  la fameuse
  130.   méthode de Ziv Lempel utilisant  un buffer "circulaire"  (ring buffer) et
  131.   une méthode  de recherche des  répétitions de séquences  d'octets par des
  132.   arbres.  Le codage  de  la  position et la  longueur de la  chaîne qui se
  133.   répètent est optimisé par un algorithme annexe  inspiré de  la méthode de
  134.   Huffman. Les octets non compactés sont envoyés tels quels dans le fichier
  135.   car un algorithme de compression annexe (  comme "Adaptive Huffman" (voir
  136.   LHARC)  ou avec des arbres de Shanon-Fano (voir PKZIP))  aurait nécessité
  137.   un temps de décompactage plus  important et surtout  un décompacteur plus
  138.   complexe et long, ce qui aurait en fait allongé le fichier EXE compacté.
  139.     
  140.     Le décompacteur est logé à la fin du fichier EXE et fait  395 octets de
  141.   long pour la version 0.90 et 330 pour la version 0.91.  Il  doit:
  142.     -  Contrôler le CRC pour s'assurer que personne  ne  l'a modifié (utile
  143.   contre les virus). Si oui, afficher le message: "CRC Error". Cette option
  144.   a été enlevée  dans LZEXE v0.91  car elle allonge  inutilement le fichier
  145.   EXE et le temps de décompactage.  De plus le contrôle du CRC n'était fait
  146.   que sur le décompacteur. 
  147.     -  Se déplacer en haut de la RAM,  puis déplacer le code  compacté pour
  148.   laisser un peu de place au fichier EXE
  149.     -  Décompacter  le  code,  en contrôlant qu'il est  correct, et surtout
  150.   ajuster les segments si on dépasse 64  Ko  (ce qui m'a posé des problèmes
  151.   en terme de vitesse)
  152.     -  Décompacter la table de  relocation,  et mettre à  jour les adresses
  153.   relogeables de fichiers EXE.  C'est ici que LZEXE v0.91 a été modifié: la
  154.   table de relocation est beaucoup mieux compactée.
  155.     - Lancer le programme en mettant à jour CS,IP,SS,SP
  156.     
  157.     C'est tout !!!
  158.     
  159.     Ce décompacteur est à lui seul un petit  chef-d'oeuvre de programmation
  160.   en assembleur 8086: inutile de vous dire que sa mise au point a été assez
  161.   longue. 
  162.     Mais le compacteur m'a aussi posé pas mal de  problèmes, notamment pour
  163.   mettre à jour  tous  les pointeurs que  le  décompacteur  utilise  par la
  164.   suite.
  165.     
  166.     
  167.     5-LZEXE version 0.91 et les autres compacteurs
  168.     ----------------------------------------------
  169.     
  170.     PKARC (dernière version):  LZEXE  fait  beaucoup  mieux, le "crunching"
  171.   (alias Shrinking pour PKZIP) étant un algorithme dépassé...
  172.     
  173.     PKZIP v0.92:  LZEXE mieux dans pratiquement tous les  cas.
  174.     
  175.     PKZIP v1.02:  sur  les  gros  fichiers,  LZEXE  fait  mieux.  sinon, la
  176.   différence  est assez faible.
  177.     LHARC  v1.01:  il fait mieux que LZEXE avec  "freezing"  sur les petits
  178.   fichiers.
  179.     
  180.     LARC: LZEXE fait mieux.
  181.     
  182.     Remarques importantes: 
  183.     -  On ne peut pas vraiment comparer ce  que fait LZEXE  avec les autres
  184.   compacteurs puisque dans les fichiers EXE compactés  par mon soft  il y a
  185.   aussi  un  décompacteur  qui le  lance tout  seul.  Néanmoins  les autres
  186.   compacteurs  peuvent  faire  des  fichiers  "self-extracting",  mais  ils
  187.   décompactent sur disque,  sont lents et ajoutent plusieurs dizaines de Ko
  188.   aux fichier compactés (sauf pour LARC et LHARC qui n'ajoutent  qu'1  ou 2
  189.   Ko, mais qui ne décompactent que sur disque malheureusement).
  190.     - Dans presque tous les cas, les compacteurs que j'ai cités ne pourront
  191.   pas recompacter plus un fichier déjà réduit avec LZEXE, ce qui montre son
  192.   efficacité. Seul LHarc arrive à gagner quelques octets.
  193.     
  194.     
  195.     6-L'avenir...
  196.     -------------
  197.     
  198.     -  je  pense aussi à un  décompacteur  automatique de  documentation du
  199.   genre de LISEZMOI.COM  ou LIST.COM qui serait  très commode  et peut être
  200.   que je vais en faire un.
  201.     -  Enfin, j'espère faire un compacteur "universel" comme PKZIP ou LHARC
  202.   plus lent que LZEXE en décompactage mais qui fera beaucoup mieux  que ces
  203.   derniers.
  204.     
  205.     
  206.     7-Mises en garde et voeux...
  207.     ---------------------------
  208.     
  209.     J'espère  que LZEXE  et  les  fichiers  EXE  compactés  par  lui seront
  210.   beaucoup  diffusés  ce  qui m'incitera  à  faire  d'autres  versions plus
  211.   rapides...
  212.     
  213.     Je  décline  toute  responsabilité  en  cas   de   perte  d'information
  214.   occasionné par LZEXE. Mais rassurez-vous, les algorithmes sont fiables et
  215.   je ne crois pas qu'il y ait beaucoup de bugs.
  216.     
  217.     Attention !  Je ne vous conseille pas de  compacter et  de diffuser des
  218.   logiciels commerciaux protégés  par un  copyright:  les  auteurs risquent
  219.   d'êtres mécontents...
  220.     
  221.     Mais si  vous  faites un FREEWARE,  un SHAREWARE,  ou même un programme
  222.   commercial,  rien ne vous empêche de le compacter avec LZEXE,  et même je
  223.   vous le conseille:
  224.     -  Vos fichiers EXE seront plus petits et on croira que  vos programmes
  225.   compilés seront faits en assembleur. Que dirons vos concurrents quand ils
  226.   verront des programmes qui font la même chose que les leurs mais 30% plus
  227.   petits ?  De plus vous pourrez mettre  sur disquette (et sur  disque dur)
  228.   plus de programmes, car on a toujours besoin d'une plus grande mémoire de
  229.   masse...
  230.     -  Le  compactage constitue un excellent codage  qui peut  empêcher des
  231.   personnes peu recommandables de modifier les messages ou bien de voir vos
  232.   algorithmes  secrets à moins  de  désassembler  le  décompacteur,  ce qui
  233.   risque de n'être pas très facile, c'est moi qui vous le dit !
  234.     
  235.     
  236.     Voilà,  en espérant que ce  soft vous servira et  qu'il ne  possède pas
  237.   trop de bugs !
  238.     
  239.        Fabrice.
  240.     
  241.     Voici mon adresse si vous  voulez des  infos sur les algorithmes  ou si
  242.   vous avez des problèmes:
  243.     
  244.         Fabrice BELLARD
  245.     451,chemin du mas de Matour
  246.         34790 GRABELS  (FRANCE)
  247.     
  248.         
  249.     
  250.     Mon pseudo sur RTEL ou QBBS: FAB
  251.     
  252.     
  253.     
  254.     Evolution des versions:
  255.     
  256.     LZEXE v0.91:
  257.     ------------
  258.     - Le tiret "-" n'était pas accepté dans le noms de fichiers, cela a été
  259.   corrigé.
  260.     - LZEXE signale la présence des overlays internes.
  261.     -  LZEXE  indique si  le  fichier a déjà  été compacté  avec EXEPACK de
  262.   Microsoft.
  263.     -  Un bug de  la  version 0.90  faisait  occuper  trop  de  mêmoire aux
  264.   fichiers EXE: cela a été corrigé.
  265.     - Le compactage de la table de relocation a été amélioré.
  266.     - Le contrôle du CRC a été enlevé.
  267.     - La taille du décompacteur est passée de 395 à 330 octets.
  268.     
  269.     
  270.